テーブルのデータが増えてきて、そのテーブルの平均や合計などの集約を結果を表示させたい場合が出てきます その場合のSQL文をいくつか紹介していきたいと思います

<h2>テーブルを集約して検索方法</h2>

集約関数

データに対してSQL文で計算などを行う時には『関数』を使用

COUNT列数を数える
SUM各行の値を合計する
AVG各行の値の平均値を求める
MAX各行の値の最大値を求める
MIN各行の値の最小値を求める
集約関数または集合関数と呼びます

青枠が列の最大値

赤枠が列の最小値になります

COUNT関数

関数とは、何らかのデータを関数という箱のようなイメージの中に入力したら、別のデータに変換して出力すると、いうイメージを持ってみてください(´ー`)

入力のことを『引数』『パラメータ』、出力のことを『戻り値』と、呼びます

先程のテーブル(テーブル名「ギニュー特戦隊」)データで考えてみましょう

まずはSQL文を書いてみます

SELECT COUNT (*)
FROM ギニュー特戦隊;

結果は『5』と出ます

COUNT関数で列の合計値を出す命令をし、(*)で列全体を選択しています

NULLを含む行の場合

行全体はCOUNT(*)

NULL以外の行を数える時は、COUNT(列名)と、対象の列名を指定して書きます

SELECT COUNT (NULL値)
FROM ギニュー特戦隊;

結果は『3』と表示されます

SUM関数

合計を求める時にはSUM関数を使用します

SELECT SUM (戦闘力)
FROM ギニュー特戦隊;

戦闘力の列の合計値の結果が表示されます

SELECT SUM (戦闘力), SUM (NULL値)
FROM ギニュー特戦隊;

この結果は戦闘力の合計値とNULL値の合計値の440になります

単純に100+300+40の式です

NULL値を含む列の場合

COUNT関数以外の集約関数ではNULL値は除外されます

COUNT関数にも適用して欲しかったね...
きっと訳があるんだよ...今は知らないけど...(^_^;)

AVG関数

AVGとはaverageで平均値のことですね!

書き方はSUM関数と一緒です

MAX/MIN関数

行の最大値と最小値を表示させたい時にはMAX(最大)、MIN(最小)関数を使います

SUM,AVG関数は数字型にしか使用できませんが、MAX/MIN関数はほとんどの型データに使用できます

日付のデータのMAX関数は最新のデータ、MIN関数は1番過去のデータを取得します

文字列のデータでは、1番短い文字列がMINで1番長い文字列がMAXになるという訳です

特定のキーワードの種類数を知りたい時

type列から種類を取得して『3』種類(バランス、スピード、スキル)のデータを取得したい時には、DISTINCTを使用します

SELECT COUNT (DISTINCT 戦闘力)
FROM ギニュー特戦隊;

 COUNT (DISTINCT 列名)で重複値を除外した結果を、ここでは『3』を結果として表示してくれます

DISTINCTについてもっと詳しく知りたい時にこちらから

DISTINCTは他の関数にも使用できます

SELECT SUM ( ○○), SUM (DISTINCT ○○)
FROM ギニュー特戦隊;

この場合では、SUM (○○)は単純に合計値です

SUM (DISTINCT ○○)は、重複したデータは1つのデータとしてカウントされるので、SUM (○○)の結果より少なく表示されます

例えば、1、2、3、3のデータとします SUMは9ですね でも、DISTINCTを使うと3は1回しかカウントされずに1+2+3で6の結果になります

もっと詳しく知りたい方は公式ページで

テーブルをグループ化

テーブルを「〜ごと」「〜単位」などグループに切り分けて集約する関数があります

GROUP BY句

「〜にグループ化分けをする」

SELECT <列名1>,<列名2>,<列名3>...
FROM <テーブル名>
GROUP BY <列名1>,<列名2>,<列名3>...

GROUP BY句を使うと複数のグループに分れるようになります

SELECT type,COUNT *
FROM ギニュー特戦隊
GROUP BY type;

結果はバランス3、スピード1、スキル1と表示されます

イメージとしてはこのようにグループに切り分けられてます

グループ化にすればそれぞれでSUM関数などが使用できるようになります

GROUP BY句に指定する列を「集約キー」「グループ化列」といいます

FROM句の後ろに記述

SELECT→FROM→WHERE→GROUP BY

NULLが含まれる場合でも『NULL』というグループが作られる

WHERE句を含んだ挙動

SELECT <列名1>,<列名2>,<列名3>...
FROM <テーブル名>
WHERE 
GROUP BY <列名1>,<列名2>,<列名3>...

WHERE句でtypeを絞り込むの場合の結果はこうなります

SELECT 戦闘力 COUNT(*)
FROM ギニュー特戦隊
WHERE type = 'バランス'
GROUP BY 戦闘力
GPOUP BY句とWHERE句を一緒に使う場合の実行される順番

FROM→→WHERE→GROUP BY→SELECT

書く順番と実行される順番は違うのでここら辺はしっかり把握しときたいポイントです!

<strong>GPOUP BY句</strong>を使う時の注意点

GPOUP BY句で集約する列以外はSELECT句で使用不可

SELECT句でASを使用たものはGPOUP BY句では使用不可

GPOUP BY句を使っての結果順序はランダムなのでSELECT文で順番を指定しておく

集約関数の記述はSELECT句とHAVING句のみ

新しくHAVING句というのが出てきましたが、これについては次の記事で詳しく説明したいと思います!

おすすめの記事